// dialogUtils.js (弹窗相关逻辑)
/**
 * 创建弹窗所需的参数对象
 * @param {Object} store - Vuex store，用于获取用户信息和选择数据
 * @param {Object} row - 当前行的数据对象，包含 collegeCode 和 majorCode 等字段
 * @param {Boolean} isMajor - 是否为专业弹窗，如果为 true 则忽略 collegeCode
 * @returns {Object} params - 弹窗所需的参数对象
 */
const createDialogParams = (store, row, isMajor) => {
  // 获取省份代码和年份，优先使用用户的选择数据
  const { newSelectSubjectData, userInfo } = store.getters.user;
  const provinceCode = newSelectSubjectData.provinceCode || userInfo.pid;
  const year =
    (newSelectSubjectData.year || localStorage.getItem('defultYear')) + '';

  // 根据 isMajor 动态选择 collegeCode 或 majorCode
  return {
    pid: provinceCode,
    year,
    // sgid: row.bestCombine,
    sgid:
      store.getters.znxkInfo.yxSgID.join(',') ||
      store.getters.znxkInfo.sgId.join(','),
    ...(isMajor
      ? { majorCode: row.majorCode }
      : { collegeCode: row.collegeCode }),
  };
};

/**
 * 弹窗处理函数映射，根据 refCode 动态选择弹窗处理逻辑
 * @param {Object} params - 弹窗所需的参数对象
 * @param {Object} row - 当前行的数据对象，包含 collegeName 字段
 * @param {Boolean} isMajor - 是否为专业弹窗，影响传递给弹窗的参数
 * @param {Ref} ratioDialogRef - 比例弹窗的引用，用于打开比例弹窗
 * @param {Ref} offerAmajorRef - 专业提供弹窗的引用，用于打开专业提供弹窗
 * @returns {Object} handlers - 弹窗处理函数映射
 */
const dialogHandlers = (
  params,
  row,
  isMajor,
  ratioDialogRef,
  offerAmajorRef,
) => ({
  ratioDialogRef: () => {
    // 删除 sgid 参数，因为 ratioDialog 不需要它
    delete params.sgid;
    // 打开比例弹窗
    ratioDialogRef.value.handleDialogVisible(
      params,
      row.collegeName,
      isMajor ? '2' : '1',
    );
  },
  offerAmajorRef: () => {
    // 打开专业提供弹窗
    offerAmajorRef.value.handleOpenDialogVisible(
      params,
      row.collegeName,
      isMajor ? '1' : '2',
    );
  },
});

/**
 * 打开弹窗的主函数，根据 refCode 动态调用相应的弹窗方法
 * @param {Object} store - Vuex store，用于获取用户信息和选择数据
 * @param {Object} row - 当前行的数据对象，包含 collegeCode 和 majorCode 等字段
 * @param {String} refCode - 弹窗类型标识符，根据该值选择不同的弹窗
 * @param {Boolean} isMajor - 是否为专业弹窗，影响参数和显示内容
 * @param {Ref} ratioDialogRef - 比例弹窗的引用，用于打开比例弹窗
 * @param {Ref} offerAmajorRef - 专业提供弹窗的引用，用于打开专业提供弹窗
 */
export const handleOpenDialog = (
  store,
  row,
  refCode,
  isMajor,
  ratioDialogRef,
  offerAmajorRef,
) => {
  // 创建弹窗参数
  const params = createDialogParams(store, row, isMajor);
  // 获取弹窗处理函数映射
  const handlers = dialogHandlers(
    params,
    row,
    isMajor,
    ratioDialogRef,
    offerAmajorRef,
  );

  // 根据 refCode 调用对应的弹窗处理函数
  handlers[refCode]?.();
};
